// Package queue queue/queue.go
package queue

import "errors"

var ErrQueueClosed = errors.New("queue is closed")

// Queue 定义任务队列接口
type Queue interface {
	// Put 将任务放入队列 (可能阻塞)
	Put(task interface{}) error
	// Get 从队列获取任务 (阻塞)
	Get() (interface{}, error)
	// Close 关闭队列，不再接受新任务，可能唤醒阻塞的 Get
	Close() error
	// Clear 清理队列中的所有数据（用于本次运行结束后）
	Clear() error
}

// IsClosed 检查队列是否已关闭
func IsClosed(q Queue) bool {
	// 尝试放入一个nil值，如果返回ErrQueueClosed错误，则表示队列已关闭
	err := q.Put(nil)
	return errors.Is(err, ErrQueueClosed)
}
